/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import POJO.Donhang;
import UTIL.HibernateUtil;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author nhlvu07db373
 */
public class DonhangDAO extends HibernateDaoSupport {

    private Session session;

    /**
     * Lấy danh sách các đơn hàng
     * @return List các đơn hàng
     */
    public List dsDonhangAll() {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class);
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }
     public List dsDonhangFi(int maTinhTrang) {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class).add(Restrictions.eq("maTinhTrang", maTinhTrang));
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy danh sách các đơn hàng có phân trang
     * @param firstResult dòng đầu tiên cần lấy
     * @param maxResults số dòng tối đa cần lấy
     * @return List các dòng đơn hàng
     * @throws Throwable 
     */
    public List dsSDonhangAll(int firstResult, int maxResults) throws Throwable {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class);
            crit.setFirstResult(firstResult);
            crit.setMaxResults(maxResults);
            list = crit.list();
            ts.commit();
            session.flush();

        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;

    }

    /**
     * Lấy danh sách đơn hàng của người dùng
     * @param maNguoiDung mã người dùng
     * @return List danh sách đơn hàng của người dùng
     */
    public List dsDonhangAll(String maNguoiDung) {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class).add(Restrictions.like("maNguoiDung", maNguoiDung));
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy danh sách đơn hàng của người dùng theo tình trạng
     * @param maNguoiDung mã người dùng
     * @param maTinhTrang mã tình trạng đơn hàng
     * @return 
     */
    public List dsDonhangAll(String maNguoiDung, int maTinhTrang) {
        List list = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class).add(Restrictions.and(
                    Restrictions.like("maNguoiDung", maNguoiDung), Restrictions.eq("maTinhTrang", maTinhTrang)));
            list = crit.list();
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return list;
    }

    /**
     * Lấy thông tin của đơn hàng
     * @param maDh mã của đơn hang kiểu string
     * @return 
     */
    public Donhang layDonhang(String maDh) {
        Donhang Dh = null;
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            Criteria crit = session.createCriteria(Donhang.class).add(Restrictions.like("maDonHang", maDh));
            List list = crit.list();
            Dh = (Donhang) list.get(0);
            ts.commit();
            session.flush();
        } catch (Exception ex) {
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return Dh;
    }

    /**
     * Ghi nhận thay đổi đơn hàng hay lập đơn hàng mới
     * @param Dh hơn hàng POJO
     * @return kết quả là true nếu xử lí thành công
     */
    public boolean luuDonhang(Donhang Dh) {
        boolean kq = false;
        if (Dh.getMaDonHang().equals("")) {
            String maDh = new GetIDDAO().getID("DH", "donhang", "MaDonHang");
            Dh.setMaDonHang(maDh);
        }
        session = HibernateUtil.getSessionFactory().openSession();
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            session.saveOrUpdate(Dh);
            ts.commit();
            session.flush();
            kq = true;
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    /**
     * Xóa đơn hàng 
     * @param Dh đơn hàng POJO hay string mã đơn hàng cần xóa
     * @return kết quả là true nếu xóa thành công
     */
    public boolean xoaDonhang(Donhang Dh) {
        session = HibernateUtil.getSessionFactory().openSession();
        boolean kq = false;
        try {
            org.hibernate.Transaction ts = session.beginTransaction();
            session.delete(Dh);
            ts.commit();
            session.flush();
            kq = true;
        } catch (Exception ex) {
            if (session.getTransaction().isActive()) {
                session.getTransaction().rollback();
            }
            System.err.println(ex.getMessage().toString());
        } finally {
            session.close();
        }
        return kq;
    }

    public boolean xoaDonhang(String maDh) {
        session = HibernateUtil.getSessionFactory().openSession();
        Donhang Dh = layDonhang(maDh);
        return luuDonhang(Dh);
    }
}
